package com.macro.mall.common.api.util;

import org.springframework.util.Assert;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * class
 *
 * @author xuyanjun
 * @date 2019-08-21
 */
public class BigDecimalUtils {

    /**
     * 分转元
     *
     * @param feng  分
     * @param scale 小数点
     * @return 元
     */
    public static BigDecimal fromFengToYuan(Integer feng, Integer scale) {
        if (feng == null) {
            return BigDecimal.ZERO;
        }
        return new BigDecimal(feng).divide(new BigDecimal(100), scale, RoundingMode.HALF_UP);
    }

    /**
     * 元转分
     *
     * @param yuan 元
     * @return 分
     */
    public static Integer fromYuanToFeng(BigDecimal yuan) {
        if (yuan == null) {
            return 0;
        }
        return yuan.multiply(new BigDecimal(100)).intValue();
    }

    /**
     * 获取较小的一个
     *
     * @param value1 value1
     * @param value2 value2
     * @return 较小的一个
     * @throws IllegalArgumentException if value1 or value2 is null
     */
    public static BigDecimal getLessOne(BigDecimal value1, BigDecimal value2) {
        Assert.isTrue(value1 != null && value2 != null, "要比较的值不能为空。");

        return value1.compareTo(value2) > 0 ? value2 : value1;
    }

    /**
     * 获取较大的一个
     *
     * @param value1 value1
     * @param value2 value2
     * @return 较大的一个
     * @throws IllegalArgumentException if value1 or value2 is null
     */
    public static BigDecimal getGreaterOne(BigDecimal value1, BigDecimal value2) {
        Assert.isTrue(value1 != null && value2 != null, "要比较的值不能为空。");

        return value1.compareTo(value2) > 0 ? value1 : value2;
    }

    /**
     * 求两数之和
     *
     * @param value1 value1
     * @param value2 value1
     * @return 两数之和
     */
    public static BigDecimal sum(BigDecimal value1, BigDecimal value2) {
        return value1.add(value2);
    }
}
